// 引入electron模块
const { app, BrowserWindow, Menu, screen, dialog, shell } = require('electron');
const path = require('path');

// 全局变量，用于存储主窗口引用
let mainWindow;

// 确保只有一个实例运行
const gotTheLock = app.requestSingleInstanceLock();

if (!gotTheLock) {
  app.quit();
} else {
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    // 当运行第二个实例时，聚焦到主窗口
    if (mainWindow) {
      if (mainWindow.isMinimized()) mainWindow.restore();
      mainWindow.focus();
    }
  });

  function createWindow() {
    // 获取主显示器尺寸
    const primaryDisplay = screen.getPrimaryDisplay();
    const screenDimensions = primaryDisplay.workAreaSize;

    // 计算窗口尺寸为屏幕的2/3
    const windowWidth = Math.floor(screenDimensions.width * 2 / 3);
    const windowHeight = Math.floor(screenDimensions.height * 2 / 3);

    // 创建浏览器窗口
    mainWindow = new BrowserWindow({
      width: windowWidth,
      height: windowHeight,
      title: 'Wallpaper时光机',
      center: true,
      webPreferences: {
        nodeIntegration: false,
        contextIsolation: true,
        webSecurity: true,
        preload: path.join(__dirname, 'preload.js')
      },
      icon: path.join(__dirname, 'icon.ico')
    });

    // 加载指定网站
    mainWindow.loadURL('https://wallpaper.mcyin.cc/');

    // 监听下载开始事件，修改保存对话框标题为"下载"
    mainWindow.webContents.session.on('will-download', (event, item, webContents) => {
      // 修改下载对话框的标题
      item.setSaveDialogOptions({
        title: '下载 - Wallpaper时光机'
      });
    });

    // 使用setWindowOpenHandler统一处理所有新窗口打开事件
    mainWindow.webContents.setWindowOpenHandler(({ url }) => {
      try {
        // 解析URL获取域名
        const parsedUrl = new URL(url);
        const domain = parsedUrl.hostname;

        // 如果不是指定域名，则使用默认浏览器打开
        if (domain !== 'wallpaper.mcyin.cc') {
          shell.openExternal(url);
          return { action: 'deny' };
        }

        // 获取主显示器尺寸
        const primaryDisplay = screen.getPrimaryDisplay();
        const screenDimensions = primaryDisplay.workAreaSize;

        // 计算窗口尺寸为屏幕的2/3
        const windowWidth = Math.floor(screenDimensions.width * 2 / 3);
        const windowHeight = Math.floor(screenDimensions.height * 2 / 3);

        // 创建新窗口，使用与主窗口相同的图标和配置
        const newWindow = createNewWindow(windowWidth, windowHeight, url);

        // 阻止默认的窗口创建行为
        return { action: 'deny' };
      } catch (error) {
        console.error('URL解析错误:', error);
        // 如果URL解析失败，默认使用默认浏览器打开
        shell.openExternal(url);
        return { action: 'deny' };
      }
    });

    // 窗口关闭时的事件
    mainWindow.on('closed', function () {
      mainWindow = null;
    });

    // 监听ESC键退出全屏
    mainWindow.on('keyup', (event) => {
      if (event.key === 'Escape' && mainWindow.isFullScreen()) {
        mainWindow.setFullScreen(false);
      }
    });

    // 为渲染进程添加键盘事件监听
    mainWindow.webContents.on('before-input-event', (event, input) => {
      if (input.key === 'Escape' && mainWindow.isFullScreen()) {
        mainWindow.setFullScreen(false);
        event.preventDefault();
      }
    });
  }

  // 清理缓存函数
  function clearCache() {
    if (mainWindow) {
      const session = mainWindow.webContents.session;

      // 清理HTTP缓存
      session.clearCache().then(() => {
        console.log('HTTP缓存清理完成');
      }).catch((err) => {
        console.error('清理HTTP缓存失败:', err);
      });

      // 清理存储数据（包括localStorage、sessionStorage、indexedDB、cookies等）
      session.clearStorageData().then(() => {
        console.log('存储数据清理完成');
        dialog.showMessageBox({
          title: '清理缓存',
          message: '缓存清理完成',
          icon: path.join(__dirname, 'icon.ico'),
          buttons: ['确定']
        });
      }).catch((err) => {
        console.error('清理存储数据失败:', err);
        dialog.showMessageBox({
          title: '清理缓存',
          message: '缓存清理失败',
          detail: err.message,
          icon: path.join(__dirname, 'icon.ico'),
          buttons: ['确定']
        });
      });
    }
  }

  // 设置应用菜单（中文）
  function setupMenu() {
    const template = [
      {
        label: '文件',
        submenu: [
          { label: '刷新', role: 'reload' },
          { label: '强制刷新', role: 'forcereload' },
          { type: 'separator' },
          {
            label: '清理缓存',
            click: clearCache
          },
          { type: 'separator' },
          {
            label: '退出',
            click: () => {
              clearCache();
              app.quit();
            }
          }
        ]
      },
      {
        label: '视图',
        submenu: [
          { label: '全屏', role: 'togglefullscreen' },
          { type: 'separator' },
          { label: '放大', role: 'zoomin' },
          { label: '缩小', role: 'zoomout' },
          { label: '重置缩放', role: 'resetzoom' }
        ]
      },
      {
        label: '窗口',
        submenu: [
          { label: '最小化', role: 'minimize' },
          { label: '关闭', role: 'close' }
        ]
      },
      {
        label: '帮助',
        submenu: [
          {
            label: '关于',
            click() {
              dialog.showMessageBox({
                title: '关于 - Wallpaper时光机',
                message: 'Wallpaper时光机',
                detail: `应用版本: 0.0.1\n\nElectron版本: ${process.versions.electron}\n\nElectron Builder版本: 26.0.12\n\n打包日期: 2025-12-5\n\nWallpaper时光机, 收集每日壁纸。\n\n客户端代理: ${mainWindow.webContents.userAgent}\n\n© ${new Date().getFullYear()} wallpaper.mcyin.cc Wallpaper时光机 - 本应用使用Electron引擎开发。`,
                icon: path.join(__dirname, 'icon.ico'),
                buttons: ['确定']
              });
            }
          }
        ]
      }
    ];

    const menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
  }

  // Electron完成初始化并准备创建浏览器窗口时调用
  app.on('ready', () => {
    createWindow();
    setupMenu();
  });

  // 创建新窗口的辅助函数
  function createNewWindow(width, height, url) {
    // 创建新窗口，使用与主窗口相同的图标和配置
    const newWindow = new BrowserWindow({
      width: width,
      height: height,
      center: true,
      webPreferences: {
        nodeIntegration: false,
        contextIsolation: true,
        webSecurity: true,
        preload: path.join(__dirname, 'preload.js')
      },
      icon: path.join(__dirname, 'icon.ico')
    });

    // 加载URL到新窗口
    newWindow.loadURL(url);

    // 添加ESC键退出全屏功能
    newWindow.on('keyup', (event) => {
      if (event.key === 'Escape' && newWindow.isFullScreen()) {
        newWindow.setFullScreen(false);
      }
    });

    // 为渲染进程添加键盘事件监听
    newWindow.webContents.on('before-input-event', (event, input) => {
      if (input.key === 'Escape' && newWindow.isFullScreen()) {
        newWindow.setFullScreen(false);
        event.preventDefault();
      }
    });

    return newWindow;
  }

  // 全局监听所有web内容创建事件，确保所有窗口都使用相同的图标
  app.on('web-contents-created', (event, contents) => {
    // 为所有内容（包括iframe）设置窗口打开处理器
    contents.setWindowOpenHandler(({ url }) => {
      try {
        // 解析URL获取域名
        const parsedUrl = new URL(url);
        const domain = parsedUrl.hostname;

        // 如果不是指定域名，则使用默认浏览器打开
        if (domain !== 'wallpaper.mcyin.cc') {
          shell.openExternal(url);
          return { action: 'deny' };
        }

        // 获取主显示器尺寸
        const primaryDisplay = screen.getPrimaryDisplay();
        const screenDimensions = primaryDisplay.workAreaSize;

        // 计算窗口尺寸为屏幕的2/3
        const windowWidth = Math.floor(screenDimensions.width * 2 / 3);
        const windowHeight = Math.floor(screenDimensions.height * 2 / 3);

        // 使用辅助函数创建新窗口
        createNewWindow(windowWidth, windowHeight, url);

        // 阻止默认的窗口创建行为
        return { action: 'deny' };
      } catch (error) {
        console.error('URL解析错误:', error);
        // 如果URL解析失败，默认使用默认浏览器打开
        shell.openExternal(url);
        return { action: 'deny' };
      }
    });
  });

  // 关闭所有窗口时退出应用
  app.on('window-all-closed', function () {
    if (process.platform !== 'darwin') {
      clearCache();
      app.quit();
    }
  });

  // 在macOS上，点击dock图标时重新创建窗口
  app.on('activate', function () {
    if (mainWindow === null) {
      createWindow();
    }
  });
}